package com.xiaoyu.string;

/**
 * Created by xiaoyu on 16/3/29.
 * 使用非字面量:
 #1 = Methodref          #7.#32         //  java/lang/Object."<init>":()V
 #2 = String             #33            //  strVal_1
 #3 = Class              #34            //  java/lang/String
 #4 = Methodref          #3.#35         //  java/lang/String."<init>":(Ljava/lang/String;)V



 0: ldc           #2     //将#2对应的常量值加载到操作数栈中
 2: astore_1              //将当前操作数栈中赋于变量1，即str1
 3: new           #3     //创建了一个类实例，#3指向一个实例类型String
 6: dup                   //配置上行完成操作栈指令
 7: ldc           #2     //将#2对应的常量值加载到操作数栈中
 9: invokespecial #4     //调用String实例初始化方法，并将#4输入
 12: astore_2              //将new出来的实例赋于变量2，即str2

 这时str2变量是创建一个新的内存地址，而非直接指向#16常量内存地址，
 所以str1==str2的结果为false。同时可以看到通过new String()带来看更多的字节码指令操作，运行上花费了更多的系统资源。


 */
public class ConstPoolTest2 {
    public static void main(String[] args) {
        String str1 = "strVal_1";
        String str2 = new String("strVal_1");

        System.out.printf("str1==str2 is %b",str1==str2);

    }
}
